axios 是一个轻量的 HTTP客户端。
基于 XMLHttpRequest 服务来执行 HTTP 请求,支持丰富的配置,支持 Promise,支持浏览器端和 Node.js 端。自Vue2.0起,尤大宣布取消对 vue-resource 的官方推荐,转而推荐 axios。现在 axios 已经成为大部分 Vue 开发者的首选。
特性从浏览器中创建 XMLHttpRequests从 node.js 创建 http 请求支持 Promise API拦截请求和响应转换请求数据和响应数据取消请求自动转换 JSON 数据客户端支持防御 XSRF二、axios的二次封装axios 的 API 很友好,可以很轻松地在项目中直接使用。不过随着项目规模增大,如果每发起一次HTTP请求,就要把这些比如设置超时时间、设置请求头、根据项目环境判断使用哪个请求地址、错误处理等等操作,都需要写一遍。这种重复劳动不仅浪费时间,而且让代码变得冗余不堪,难以维护。为了提高代码质量,我们应该在项目中二次封装一下 axios 再使用。
1.如何封装封装的同时,你需要和后端协商好一些约定,请求头,状态码,请求超时时间.......
设置接口请求前缀:根据开发、测试、生产环境的不同,前缀需要加以区分请求头 : 来实现一些具体的业务,必须携带一些参数才可以请求(例如:会员业务)状态码: 根据接口返回的不同status , 来执行不同的业务,这块需要和后端约定好请求方法:根据get、post等方法进行一个再次封装,使用起来更为方便请求拦截器: 根据请求的请求头设定,来决定哪些请求可以访问响应拦截器: 这块就是根据 后端返回来的状态码判定执行不同业务axios的常用基本配置项为:
axios({ method: 'get', // post、get、put、delete.... baseURL: '', // 请求的域名,基本地址,公共的路径 url: '', // 请求的路径 params: {}, // get参数会将请求参数拼接在url上 data: {}, // post会将请求参数放在请求体中 headers: {}, // 设置请求头,例如设置token等 timeout: 1000, // 设置请求超时时长,单位:ms withCredentials:false,//表明了是否是跨域请求、默认是false maxContentLength:1000,//相应内容的最大值 auth:{},//表示应该使用 HTTP 基本身份验证,并提供凭据。这将设置一个 `Authorization` 标头,覆盖您使用 `headers` 设置的任何现有的 `Authorization` 自定义标头。 responseType: 'json', // 默认值 // `responseEncoding` 表示用于解码响应的编码(仅限 Node.js) // 注意:忽略“stream”或客户端请求的 `responseType` responseEncoding: 'utf8', // 默认值 // `xsrfCookieName` 是用作 xsrf 令牌值的 cookie 的名称 xsrfCookieName: 'XSRF-TOKEN', // 默认值 // `xsrfHeaderName` 是携带 xsrf 令牌值的 http 标头的名称 xsrfHeaderName: 'X-XSRF-TOKEN', // 默认值 ...})在项目中,我是这样二次封装的:
1.在axios.js文件内设置好基础的配置项:
import Vue from "vue";import axios from "axios";axios.defaults.timeout = 100000;axios.defaults.withCredentials = true;Vue.prototype.$axios = axios;//把axios挂载到vue的原型上供全局调用。2.如果有生产环境的区分,则可以通过判断node环境变量确定